package com.ljx.designMode.factor;

/**
 * @author LJX
 * @Description: TODO
 * @Date: 2022/11/8 16:36
 * @Version 1.0
 *
 * 让Adapter持有Adaptee类的实例，然后再实现Target接口，
 * 以这种持有对象的方式来实现适配器功能。
 */
public class ObjectAdapterMode {
	public static void main(String[] args) {
		Adapter1 adapter1 = new Adapter1(new AdapteeAC220V());
		System.out.println(adapter1.outPut());
	}
}

/**
 * Adaptee受改造者（想要将其改造成适合我们的交流电）
 * 它是需要被访问的、需要被适配的组件
 */
class AdapteeAC220V{
	public int input220V(){
		int input=220;
		return input;
	}
}

/**
 * 类适配器
 * 适配器是本模式的核心，适配器把原接口转换成目标接口
 * 显然，这一角色不可以是接口，只能是具体的类
 * 适配器类，通过聚合和实现目标接口，
 * 让客户端按照目标接口的方法访问适配者
 */
class Adapter1 extends AdapteeAC220V implements Target1{
	private AdapteeAC220V adapteeAC220V;

	public Adapter1(AdapteeAC220V adapteeAC220V) {
		this.adapteeAC220V = adapteeAC220V;
	}

	@Override
	public int outPut() {
		return adapteeAC220V.input220V()/44;
	}
}

/**
 * 目标角色：这就是我们想要得到的接口
 * 注意：由于这里讨论的是类适配器模式，因此目标不可以是类。
 * 目标接口，当前系统业务所使用的接口，可以是抽象类或接口
 */
interface Target1{
	int outPut();
}